using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Mosaic Dataset To Mobile Mosaic Dataset</para>
    /// <para>Converts a mosaic dataset into a mobile mosaic dataset compatible with ArcGIS Runtime SDK. A mobile mosaic dataset resides in a mobile geodatabase.</para>
    /// <para>将镶嵌数据集转换为与 ArcGIS Runtime SDK 兼容的移动镶嵌数据集。移动镶嵌数据集位于移动地理数据库中。</para>
    /// </summary>    
    [DisplayName("Mosaic Dataset To Mobile Mosaic Dataset")]
    public class MosaicDatasetToMobileMosaicDataset : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MosaicDatasetToMobileMosaicDataset()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset to be converted to a mobile mosaic dataset.</para>
        /// <para>要转换为移动镶嵌数据集的镶嵌数据集。</para>
        /// </param>
        /// <param name="_out_mobile_gdb">
        /// <para>Mobile Geodatabase</para>
        /// <para>The geodatabase where the converted mosaic dataset will be created.</para>
        /// <para>将在其中创建转换后的镶嵌数据集的地理数据库。</para>
        /// </param>
        /// <param name="_mosaic_dataset_name">
        /// <para>Mosaic Dataset Name</para>
        /// <para>The name of the mobile mosaic dataset to be created.</para>
        /// <para>要创建的移动镶嵌数据集的名称。</para>
        /// </param>
        public MosaicDatasetToMobileMosaicDataset(object _in_mosaic_dataset, object _out_mobile_gdb, object _mosaic_dataset_name)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
            this._out_mobile_gdb = _out_mobile_gdb;
            this._mosaic_dataset_name = _mosaic_dataset_name;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Mosaic Dataset To Mobile Mosaic Dataset";

        public override string CallName => "management.MosaicDatasetToMobileMosaicDataset";

        public override List<string> AcceptEnvironments => ["extent"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _out_mobile_gdb, _mosaic_dataset_name, _where_clause, _selection_feature, _out_data_folder, _convert_rasters.GetGPValue(), _out_name_prefix, _format.GetGPValue(), _compression_method.GetGPValue(), _compression_quality, _out_mosaic_dataset];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset to be converted to a mobile mosaic dataset.</para>
        /// <para>要转换为移动镶嵌数据集的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Mobile Geodatabase</para>
        /// <para>The geodatabase where the converted mosaic dataset will be created.</para>
        /// <para>将在其中创建转换后的镶嵌数据集的地理数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mobile Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_mobile_gdb { get; set; }


        /// <summary>
        /// <para>Mosaic Dataset Name</para>
        /// <para>The name of the mobile mosaic dataset to be created.</para>
        /// <para>要创建的移动镶嵌数据集的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _mosaic_dataset_name { get; set; }


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>An SQL expression to select specific items to add to the mobile mosaic dataset.</para>
        /// <para>一个 SQL 表达式，用于选择要添加到移动镶嵌数据集的特定项目。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Selection Feature</para>
        /// <para><xdoc>
        ///   <para>The mosaic dataset items to be included in the output based on the extent of another image or feature class. Items that lay along the defined extent will be included in the mosaic dataset. They will not be clipped.</para>
        ///   <bulletList>
        ///     <bullet_item>Default—The extent will be based on the maximum extent of all participating inputs. This is the default.</bullet_item><para/>
        ///     <bullet_item>Current Display Extent—The extent is equal to the data frame or visible display. The option is not available when there is no active map.</bullet_item><para/>
        ///     <bullet_item>As Specified Below—The extent will be based on the minimum and maximum extent values specified.</bullet_item><para/>
        ///     <bullet_item>Browse—The extent will be based on an existing dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要根据其他影像或要素类的范围包含在输出中的镶嵌数据集项目。沿定义范围放置的项目将包含在镶嵌数据集中。它们不会被剪裁。</para>
        ///   <bulletList>
        ///     <bullet_item>默认值 - 范围将基于所有参与输入的最大范围。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>当前显示范围 - 范围等于数据框或可见显示。当没有活动地图时，该选项不可用。</bullet_item><para/>
        ///     <bullet_item>如下所述 - 范围将基于指定的最小和最大范围值。</bullet_item><para/>
        ///     <bullet_item>浏览 - 范围将基于现有数据集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Selection Feature")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _selection_feature { get; set; } = null;


        /// <summary>
        /// <para>Output Data Folder</para>
        /// <para>If specified, the tool will create a copy of the source data in this folder. If Convert Rasters is checked, any raster functions associated with the mosaic dataset are processed before creating the copy.</para>
        /// <para>如果指定，该工具将在此文件夹中创建源数据的副本。如果选中转换栅格，则在创建副本之前将处理与镶嵌数据集关联的所有栅格函数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Data Folder")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_data_folder { get; set; } = null;


        /// <summary>
        /// <para>Convert Rasters</para>
        /// <para><xdoc>
        ///   <para>Applies the raster functions associated with the input mosaic dataset before creating the mobile mosaic dataset. If checked and you have raster functions that are not supported by ArcGIS Runtime SDK, the tool will apply the raster function chain and save the output as converted raster items. If left unchecked, the tool will not convert raster items. If you have raster functions that are not supported by ArcGIS Runtime SDK, the tool will return the appropriate error message.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Do not convert raster items with functions that are not supported by ArcGIS Runtime SDK. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Apply the raster function chain and save the output as converted raster items.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在创建移动镶嵌数据集之前，应用与输入镶嵌数据集关联的栅格函数。如果选中并且您具有 ArcGIS Runtime SDK 不支持的栅格函数，则该工具将应用栅格函数链并将输出另存为转换后的栅格项目。如果未选中，该工具将不会转换栅格项目。如果您的栅格函数不受 ArcGIS Runtime SDK 支持，则该工具将返回相应的错误消息。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不转换具有 ArcGIS Runtime SDK 不支持的函数的栅格项目。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 应用栅格函数链并将输出另存为转换后的栅格项目。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Convert Rasters")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _convert_rasters_value _convert_rasters { get; set; } = _convert_rasters_value._false;

        public enum _convert_rasters_value
        {
            /// <summary>
            /// <para>ALWAYS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ALWAYS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>AS_REQUIRED</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("AS_REQUIRED")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Base Name</para>
        /// <para>Appends a prefix to each item, which is copied or converted into the output data folder.</para>
        /// <para>将前缀追加到每个项目，该前缀将被复制或转换为输出数据文件夹。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Base Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_name_prefix { get; set; } = null;


        /// <summary>
        /// <para>Output Format</para>
        /// <para><xdoc>
        ///   <para>The format for the rasters written to the output data folder.</para>
        ///   <bulletList>
        ///     <bullet_item>TIFF—TIFF format</bullet_item><para/>
        ///     <bullet_item>PNG—PNG format</bullet_item><para/>
        ///     <bullet_item>JPEG—JPEG format</bullet_item><para/>
        ///     <bullet_item>JPEG2000—JPEG2000 format</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>写入输出数据文件夹的栅格的格式。</para>
        ///   <bulletList>
        ///     <bullet_item>TIFF - TIFF 格式</bullet_item><para/>
        ///     <bullet_item>PNG - PNG 格式</bullet_item><para/>
        ///     <bullet_item>JPEG—JPEG 格式</bullet_item><para/>
        ///     <bullet_item>JPEG2000 - JPEG2000格式</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Format")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _format_value _format { get; set; } = _format_value._TIFF;

        public enum _format_value
        {
            /// <summary>
            /// <para>TIFF</para>
            /// <para>TIFF—TIFF format</para>
            /// <para>TIFF - TIFF 格式</para>
            /// </summary>
            [Description("TIFF")]
            [GPEnumValue("TIFF")]
            _TIFF,

            /// <summary>
            /// <para>PNG</para>
            /// <para>PNG—PNG format</para>
            /// <para>PNG - PNG 格式</para>
            /// </summary>
            [Description("PNG")]
            [GPEnumValue("PNG")]
            _PNG,

            /// <summary>
            /// <para>JPEG</para>
            /// <para>JPEG—JPEG format</para>
            /// <para>JPEG—JPEG 格式</para>
            /// </summary>
            [Description("JPEG")]
            [GPEnumValue("JPEG")]
            _JPEG,

            /// <summary>
            /// <para>JPEG2000</para>
            /// <para>JPEG2000—JPEG2000 format</para>
            /// <para>JPEG2000 - JPEG2000格式</para>
            /// </summary>
            [Description("JPEG2000")]
            [GPEnumValue("JP2")]
            _JP2,

        }

        /// <summary>
        /// <para>Compression Method</para>
        /// <para><xdoc>
        ///   <para>The method of compression for transmitting the mosaicked image from the computer to the display (or from the server to the client).</para>
        ///   <bulletList>
        ///     <bullet_item>None—No compression will be used.</bullet_item><para/>
        ///     <bullet_item>JPEG—Compresses up to 8:1 and is suitable for backdrops.</bullet_item><para/>
        ///     <bullet_item>LZ77—Compresses approximately 2:1. Suitable for analysis.</bullet_item><para/>
        ///     <bullet_item>RLE—Lossless compression. Suitable for categorical datasets.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于将镶嵌图像从计算机传输到显示器（或从服务器传输到客户端）的压缩方法。</para>
        ///   <bulletList>
        ///     <bullet_item>无—不使用压缩。</bullet_item><para/>
        ///     <bullet_item>JPEG - 压缩比例高达 8：1，适用于背景。</bullet_item><para/>
        ///     <bullet_item>LZ77 - 压缩比例约为 2：1。适合分析。</bullet_item><para/>
        ///     <bullet_item>RLE - 无损压缩。适用于分类数据集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Compression Method")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _compression_method_value _compression_method { get; set; } = _compression_method_value._NONE;

        public enum _compression_method_value
        {
            /// <summary>
            /// <para>None</para>
            /// <para>None—No compression will be used.</para>
            /// <para>无—不使用压缩。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("NONE")]
            _NONE,

            /// <summary>
            /// <para>JPEG</para>
            /// <para>JPEG—Compresses up to 8:1 and is suitable for backdrops.</para>
            /// <para>JPEG - 压缩比例高达 8：1，适用于背景。</para>
            /// </summary>
            [Description("JPEG")]
            [GPEnumValue("JPEG")]
            _JPEG,

            /// <summary>
            /// <para>LZ77</para>
            /// <para>LZ77—Compresses approximately 2:1. Suitable for analysis.</para>
            /// <para>LZ77 - 压缩比例约为 2：1。适合分析。</para>
            /// </summary>
            [Description("LZ77")]
            [GPEnumValue("LZW")]
            _LZW,

            /// <summary>
            /// <para>RLE</para>
            /// <para>RLE—Lossless compression. Suitable for categorical datasets.</para>
            /// <para>RLE - 无损压缩。适用于分类数据集。</para>
            /// </summary>
            [Description("RLE")]
            [GPEnumValue("RLE")]
            _RLE,

        }

        /// <summary>
        /// <para>Compression Quality</para>
        /// <para>A value from 0 to 100. A higher number means better image quality but less compression. Only enabled when JPEG or JP2000 is specified as the compression method.</para>
        /// <para>从 0 到 100 的值。数字越大意味着图像质量越好，但压缩越少。仅当 JPEG 或 JP2000 指定为压缩方法时才启用。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Compression Quality")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _compression_quality { get; set; } = null;


        /// <summary>
        /// <para>Output Mosaic Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_mosaic_dataset { get; set; }


        public MosaicDatasetToMobileMosaicDataset SetEnv(object extent = null)
        {
            base.SetEnv(extent: extent);
            return this;
        }

    }

}